
package com.rt.schedulebase.dto;

import java.util.Map;

import com.rt.schedulebase.entity.DictExamItem;
import com.rt.schedulebase.entity.DictExamQueue;
import lombok.Data;

import java.util.List;
import java.io.Serializable;

@Data
public class ConfigDto implements Serializable {
    private List<CustomExcel> customParamValue;
    private List<IcCardPreScope> icCardPres;
    private List<String> icCardInputSupport;
    private String patientSourceIn;
    private String isGetChargeFlagRealTime;
    private String isGetAccountBalanceRealTime;
    private String isGetClinicPathFlagRealTime;
    private NotifyThirdAfterSchedule isNotifyThirdAfterSchedule;
    private List<String> examApplyInfoSupport;
    private String getChargeFlagRealTimeUrl;
    private String getAccountBalanceRealTimeUrl;
    private IcCardInputNewSupport isIcCardInputNewSupport;
    private GetReferPatientInfo isGetReferPatientInfo;
    private String isVirtualCardReader;
    private String virtualCardReaderUrl;
    private InputNewSupport isInputNewSupport;
    private String isUpperCaseInput;
    private Integer httpTimeOut;
    /**
     * 启用临床调用时经过token验证
     * 0 启用 1 禁用
     */
    private String isTokenOauthByClinic;
    private List<CommonSet> openThirdUrl;
    private String isMessageAlert;
    private String isMessageAlertByWard;
    /**
     * 【根据终端，默认申请科室及病区】(1：关闭   0：启用)，terminalType：终端类型，暂支持A-医技预约  B-临床预约  E-预约中心
     */
    private DeptWardDefaultByTerminalType isDeptWardDefaultByTerminalType;
    /**
     * 【默认科室开启后，限制更改科室及病区】(1：关闭   0：启用)
     */
    private String isEditDeptWardLimit;
    private Integer reqDateDefaultBySchedule;
    private Integer reqDateDefaultByQuery;
    private List<String> notExamClass;
    private String isShowUnScheduleItemBySelfOrMobile;
    private String isShowChargeFlag;
    private String isConfirmFeeBeforeSchedule;
    private List<String> chargeAfterExamClass;
    private List<String> chargeFirstExamClass;
    private List<String> chargeFirstPatientSource;
    private Integer cancelScheduleNoChargeMin;
    private List<CancelScheduleNoCharge> cancelScheduleNoCharge;
    private AutoScheduleDelayTime autoScheduleDelayTime;
    private ValidDate isValidDate;
    private String isCancelFlag;
    private String isSchedulePlanByDeptsche;
    private String isSchedulePlanByClinic;
    private String isScheduleQueryToClinic;
    private String isShowNotice;
    private MergeItem isMergeItem;
    private List<SelfReqDateLimit> selfReqDateLimit;
    private String isRecordNotesByCancel;
    private List<String> organExamClass;
    private List<String> spanHospitalExamClass;
    private List<ExpireDayByPatientSource> expireDayByPatientSource;
    private List<String> transTool;
    private String isSmsNoticeForSchedule;
    private String isSmsNoticeForDelSchedule;
    private List<String> smsNoticePatientSource;
    private List<DictExamQueue> smsNoticeQueue;
    private List<DictExamItem> needConfirmItem;
    private List<PrintTicketAfterSchedule> printTicketAfterSchedule;
    private GetHisApplyByThirdWS isGetHisApplyByThirdWS;
    private RecedeCostByCancel isRecedeCostByCancel;
    /**
     * 预约后扣费接口地址
     */
    private String chargeAfterScheduleUrl;
    private String confirmFeeBeforeScheduleUrl;
    private String chargeFirstScheduleUrl;
    private List<PrintTicketAfterSchedule> remindPrintTicketAfterSchedule;
    private List<MergeItem> mergeItem;
    private List<String> queueNoByExamClass;
    private List<NoFreeSourceByCancel> noFreeSourceByCancel;
    private List<String> noRegularQueueNoClass;
    private List<DictExamItem> editItemFlagBeforeSchedule;
    private List<String> noShowUnScheduleItemByTerminalType;
    private String isSpanHospitalExamClassByGreenChannel;
    private List<String> checkOutPhoneNumberByExamClass;
    private String isShowApplyNumber;
    private List<CancelScheduleNoCharge> cancelScheduleNoChargeByTime;
    private List<String> firstSchePriorityQueueByOneDay;
    private List<SelfActLimit> selfActLimit;
    private List<NeedClamAgeByItem> needClamAgeByItem;
    private String isConfirmScheduleByIgnoreDialog;
    private List<ScheduleLimit> scheduleLimitByTerminal;
    private List<String> confirmFeeBeforeScheduleExamClass;
    private List<String> confirmFeeBeforeSchedulePatientSource;
    private String isNotUpdateChargeFlagByConfirmFee;
    private String isNotUpdateChargeFlagByRecedeCost;
    private String isOpenDelApplyBtn;
    private List<CommonSet> onlyMatchApmByClamApply;
    private String isNeedPasswordByDeptsche;
    private List<String> needPasswordExamClassByDeptsche;
    private List<String> chargeFirstTerminalType;
    private List<String> noShowOnlyDeptscheScheduleByTerminalType;
    private String isAutoScheduleByTimingTask;
    private List<CommonSet> autoScheduleByTimingTask;
    private List<String> getHisApplyByHospital;
    private String scheduleStatusByConfirmFee;
    private Integer clickBtnByPrintNum;
    private Integer autoPrintNumAfterSchedule;
    private List<DictExamItem> autoPrintNumByItem;
    private String isScanBtnByScheduleSign;
    private String isDynamicSource;
    /**
     * 报到后扣费配置
     */
    private ChargeAfterSign isChargeAfterSign;
    private String isScheduleIntervalBySign;
    private String isScannerAfterSign;
    private ScheduleTodayBySign isScheduleTodayBySign;
    /**
     * 【报到后弹出预约报到信息】(1：关闭   0：启用)
     */
    private String isShowInfoDialogBySign;
    private AdvanceTimeForNightSign isAdvanceTimeForNightSign;
    private SignScheduleByThirdWS isSignScheduleByThirdWS;
    private TakeNoQueue isTakeNoQueue;
    private List<PrintTicketAfterSign> printTicketAfterSign;
    private RecedeCostByReSet isRecedeCostByReSet;
    /***
     * 签到成功后进行扣费的接口地址
     */
    private String chargeAfterSignUrl;
    private List<String> chargeAfterExamClassBySign;
    private String isConfirmFeeBeforeSign;
    private String confirmFeeBeforeSignUrl;
    private List<PrintTicketAfterSign> remindPrintTicketAfterSign;
    private List<FreeSourceByEarlySign> freeSourceByEarlySign;
    /**
     * 不可报到的检查类别
     */
    private List<String> noClickSignBtnByExamClass;
    /**
     * 可重复报到的检查类别
     */
    private List<String> repeatSignByExamClass;
    private List<String> confirmFeeBeforeSignExamClass;
    private List<String> confirmFeeBeforeSignPatientSource;
    private String isNoChargeNoSign;
    /**
     * 【取消【最早报到时间】【最晚报到时间】【时段结束时间】对报到时间的限制】(1：关闭   0：启用)
     */
    private String isSignInTimeNoLimit;
    private String advanceTimeTypeBySchedulePrint;
    private FtpConfig ftpConfig;
    private String isSystemMessageBoard;
    private String isReadCard;
    private String deleteExamsType;
    private ChargeUrl isChargeUrl;
    private String printExeUrl;
    private List<DiagnosticKeyword> diagnosticKeyword;
    private String isShowShieldApplyBtn;
    private String isShowSourceEditBtn;
    private List<ApplyDateLimit> applyDateLimit;
    private List<NoConflictExamClass> noConflictExamClass;
    private Integer noConflictIntervalTime;
    private String isNoOneDayClamDay;
    private String isNoOneDayEnhance;
    private List<NoOneDayClamOrEnhanceItem> noOneDayClamOrEnhanceItem;
    private List<OneDayOrder> oneDayOrder;
    private List<ItemBefore> itemBefore;
    private String isNotAllowScheduleByConflict;
    private List<CustomExcel> customExcel;
    private String remainSourceType;
    private SortSet customExcelSortSet;
    private List<CustomExcel> printList;
    private SortSet printListSortSet;
    private Map<String, Object> fontColor;
    private List<CustomExcel> customSearchToolByScheduleSign;
    private List<CustomExcel> customSearchToolByMultipleQuery;
    private List<CustomExcel> customTableRowByMultipleQuery;
    private List<CustomExcel> customTableRowByScheduleSign;
    private List<MenuSet> statisticalAnalysisEntry;
    private Map<String, Object> statisticalAnalysisGroupList;
    private List<CustomExcel> customExcelByVirtualOrder;
    private SortSet customExcelSortSetByVirtualOrder;
    private List<CustomExcel> customTableRowByScheduleDetail;
    private String noScheduleItemReminder;
    private String noQueryExamApplyReminder;
    private String noQueueByExamClassReminder;
    private String notAllowEditOrCancelBeforeScheduleReminder;
    private List<CustomExcel> customTableRowByOrderManage;
    private List<CustomExcel> customTableRowByApplyInfo;
    private Map<String, Object> customConfig;
    private SortSet customTableRowSortSetByScheduleSign;
    private SortSet customTableRowSortSetByMultipleQuery;
    private String noSignQueueBySelfReminder;
    private String limitScheduleItemByTerminalReminder;
    private String isAutoQueryByScheduleSign;
    private Integer autoQueryCountByScheduleSign;
    private List<CustomExcel> customSearchToolByClinicsche;
    private List<CustomExcel> customTableRowByClinicsche;
    private SortSet customTableRowSortSetByClinicsche;
    private List<CustomExcel> customSearchToolByDeptsche;
    private List<CustomExcel> customTableRowByDeptsche;
    private SortSet customTableRowSortSetByDeptsche;
    private SortSet customTableRowSortSetByScheduleSignPatientList;
    private SortSet customTableRowSortSetByClinicschePatientList;
    private List<CustomExcel> customExcelByDeptsche;
    private SortSet customExcelSortSetByDeptsche;
    private List<CustomExcel> printListByDeptsche;
    private SortSet printListSortSetByDeptsche;
    private String loginLogoPic;
    private String frameLogoPic;
    private String frameName;

    @Data
    public static class IcCardPreScope implements Serializable {
        /**
         * 前缀内容
         */
        private String cardPre;
        /***
         * 长度
         */
        private String length;
    }

    @Data
    public static class NotifyThirdAfterSchedule implements Serializable {
        /**
         * 0 启用同步给第三方预约信息
         * 1 关闭
         */
        private String grant;
        /**
         * 同步虚单
         */
        private String isSyncRefer;
        /**
         * 0 实时同步(不等待返回)
         * 1 实时同步(等待返回)
         * 2 定时同步(加同步日志表定时同步)  todo 没有地方实现
         */
        private String isSyncScheduleRealTime;
        /**
         * 同步接口url
         */
        private String syncUrl;
        /**
         * 同步检查类别和操作同步
         */
        private List<SyncInfoSet> syncInfoSet;
        private String isSyncWeChat;
        private String syncWeChatUrl;

    }

    @Data
    public static class SyncInfoSet implements Serializable {
        private String syncExamClass;
        private List<String> syncAct;

    }

    @Data
    public static class IcCardInputNewSupport implements Serializable {
        private String grant;
        private List<String> domainId;
    }

    @Data
    public static class GetReferPatientInfo implements Serializable {
        private String grant;
        private String getReferPatientInfoUrl;
    }

    @Data
    public static class InputNewSupport implements Serializable {
        private String grant;
        private List<String> inputType;
    }

    @Data
    public static class DeptWardDefaultByTerminalType implements Serializable {
        private String grant;
        private List<String> terminalType;
    }

    @Data
    public static class ChargeFirstExamClass implements Serializable {
        private String isOpen;
        private List<String> examClass;
    }

    @Data
    public static class CancelScheduleNoCharge implements Serializable {
        private List<String> examClass;
        private Integer cancelMin;
        private String cancelTime;
        private List<String> patientSource;

    }

    @Data
    public static class AutoScheduleDelayTime implements Serializable {
        private String grant;
        private List<String> patientSource;
        private Integer delayTime;
    }

    @Data
    public static class ValidDate implements Serializable {
        private String grant;
        private String validDate;

    }

    /**
     * 允许申请单智能合单的天数
     * 【允许申请单根据检查类别和限制天数进行合单】examClass：表示要合并申请单的检查类别；mergeDateTime：表示合并申请单天数限制（默认时间单位为天）；
     */
    @Data
    public static class MergeItem implements Serializable {
        private String grant;
        private Integer mergeDateLimit;
        /**
         * 表示合并申请单天数限制
         */
        private String mergeDateTime;
        /**
         * 表示要合并申请单的检查类别
         */
        private List<String> examClass;

    }

    @Data
    public static class ExpireDayByPatientSource implements Serializable {
        private String patientSource;
        private Integer expireDay;
    }

    @Data
    public static class PrintTicketAfterSchedule implements Serializable {
        private String printTicketTerminalType;
        private List<String> printTicketExamClass;
        private List<String> printTicketPatientSource;
    }

    @Data
    public static class RemindPrintTicketAfterSchedule implements Serializable {
        private String terminalType;
        private List<String> examClass;
        private List<String> patientSource;
    }

    @Data
    public static class SelfReqDateLimit implements Serializable {
        private List<String> examClass;
        private Integer expireDay;
        private List<String> terminalType;
    }

    @Data
    public static class GetHisApplyByThirdWS implements Serializable {
        private String grant;
        private String applyUrl;
    }

    @Data
    public static class RecedeCostByCancel implements Serializable {
        private String grant;
        private String recedeCostUrl;
    }

    @Data
    public static class NoFreeSourceByCancel implements Serializable {
        private List<String> examClass;
        private String leadTime;
        private Integer leadValue;
        private String leadUnit;
    }

    /***
     * 自助操作限制配置
     */
    @Data
    public static class SelfActLimit implements Serializable {
        /**
         * 限制检查类型
         */
        private List<String> examClass;
        /**
         * 限制时间
         */
        private String limitTime;
        /**
         * 限制操作类型
         */
        private List<String> limitAct;
        /***
         * 值
         */
        private String limitValue;
        /**
         * 单位
         */
        private String limitUnit;
    }

    @Data
    public static class CommonSet implements Serializable {
        private List<String> examClass;
        private String limitTime;
        private String value;
        private String unit;
        private String location;
        private String name;
        private String url;
        private List<String> terminalType;
        private String interfaceUrl;
        private List<String> patientSource;
        private List<String> filterFlag;
        private Integer day;
    }

    @Data
    public static class NeedClamAgeByItem implements Serializable {
        private RuleDto.DayScope ageScope;
        private String ageStr;
        private List<DictExamItem> examItem;
    }

    @Data
    public static class ScheduleLimit implements Serializable {
        private List<String> examClass;
        private List<String> terminalType;
        private Integer limitCount;
    }

    /**
     * 【报到成功后执行扣费】，noChargeExamClass：表示不需要扣费的检查类别
     */
    @Data
    public static class ChargeAfterSign implements Serializable {
        /**
         * (1：关闭   0：启用)
         */
        private String grant;
        /**
         * 表示不需要扣费的检查类别
         */
        private List<String> noChargeExamClass;
    }

    /**
     * 【预约当天立即报到提示】(1：关闭   0：启用)，isScheduleApmTodayBySign：表示是否启用根据可报到时间范围弹出提示；isConfirmSignByIgnoreDialog：表示是否启用跳过预约当天立即报到弹窗，直接报到
     */
    @Data
    public static class ScheduleTodayBySign implements Serializable {
        /**
         * 1：关闭   0：启用
         */
        private String grant;
        /**
         * 表示是否启用根据可报到时间范围弹出提示
         * 1：关闭   0：启用
         */
        private String isScheduleApmTodayBySign;
        /**
         * 表示是否启用跳过预约当天立即报到弹窗，直接报到
         * 1：关闭   0：启用
         */
        private String isConfirmSignByIgnoreDialog;
    }

    @Data
    public static class AdvanceTimeForNightSign implements Serializable {
        private String grant;
        private Integer advanceHour;
    }

    @Data
    public static class SignScheduleByThirdWS implements Serializable {
        private String grant;
        private String signUrl;
        List<SignInfoSet> signInfoSet;
        private String cancelUrl;
    }

    @Data
    public static class SignInfoSet implements Serializable {
        private List<String> signExamClass;
        private Integer queueNoSub;
    }


    @Data
    public static class TakeNoQueue implements Serializable {
        private String grant;
        private List<String> openPatientSource;
        private List<DictExamQueue> openQueue;
    }

    @Data
    public static class PrintTicketAfterSign implements Serializable {
        private String printTicketTerminalType;
        private List<String> printTicketExamClass;
        private List<String> printTicketPatientSource;
    }

    @Data
    public static class SystemLoginConfig implements Serializable {
        /**
         * 电子卡登录
         */
        private String isElectronicCard;
        private SystemLoginSet loginSet;
    }

    @Data
    public static class SystemLoginSet implements Serializable {
        /**
         * 登录密码密码复杂程度要求
         * 0 不限制
         * 1 限制（数字+字母+符号）
         */
        private String constitute;
        /**
         * 登录密码有效期
         * 0 不限制
         * 1 限制
         */

        private String validPeriod;
        /**
         * token有效期
         */
        private String day;

    }

    @Data
    public static class RecedeCostByReSet implements Serializable {
        private String grant;
        private String recedeCostUrl;
    }

    @Data
    public static class FreeSourceByEarlySign implements Serializable {
        private List<String> examClass;
        private String leadTime;
        private Float leadValue;
        private String leadUnit;
    }

    @Data
    public static class FtpConfig implements Serializable {
        private String address;
        private Integer port;

    }

    @Data
    public static class ChargeUrl implements Serializable {
        private String grant;
        private String chargeUrl;
    }

    @Data
    public static class ApplyDateLimit implements Serializable {
        private String limit;
        private String examClass;
    }


    @Data
    public static class SysTask implements Serializable {
        /**
         * 任务名称
         */
        private String taskName;
        /**
         * corn 表达式
         */
        private String cron;
        private String className;
        private String methodName;
        private String type;
        /**
         * 任务状态
         * 0 运行
         * 1 不运行
         */
        private String state;
    }


    @Data
    public static class DiagnosticKeyword implements Serializable {
        private List<String> examClass;
        private List<String> keyword;
    }


    @Data
    public static class NoConflictExamClass implements Serializable {
        private String examClass;
        private List<String> excepClass;
    }

    @Data
    public static class NoOneDayClamOrEnhanceItem implements Serializable {
        private String itemFlag;
        private List<DictExamItem> examItem;
    }

    @Data
    public static class OneDayOrder implements Serializable {
        private List<DictExamItem> examItem;
    }

    @Data
    public static class ItemBefore implements Serializable {
        private Integer beforeDays;
        private Integer beforeHours;
        private Integer afterDays;
        private Integer afterHours;
        private List<DictExamItem> examItemA;
        private List<DictExamItem> examItemB;
        private String itemCodeA;
        private String itemCodeB;

    }

    @Data
    public static class CustomExcel implements Serializable {
        private String columnName;
        private String mateName;
        private Integer percentage;
        private String isEnable;
        private String value;
    }

    @Data
    public static class SortSet implements Serializable {
        private String paperWidth;
        private String sortField;
        private String sortOrder;
        private String fontSize;
        private String sortField2;
        private String sortOrder2;
        private String title;
        private String intOrient;
    }

    @Data
    public static class MenuSet implements Serializable {
        private String menuName;
        private String menuUrl;
        private List<String> examClass;

    }
}
